import axios from 'axios';
import { ElMessage } from 'element-plus';
import router from '../router';

// 创建axios实例
const api = axios.create({
  baseURL: '/api',  // 统一用/api前缀
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 模拟API响应
const mockResponses = {
  // 促销设置
  '/promotion-settings': {
    get: () => ({
      status: 'success',
      data: JSON.parse(localStorage.getItem('promotionSettings') || '{}')
    }),
    post: (data) => {
      localStorage.setItem('promotionSettings', JSON.stringify(data));
      return {
        status: 'success',
        message: '保存成功'
      };
    }
  }
};

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 从localStorage获取token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    
    // 检查是否需要模拟响应
    const mockPath = config.url.replace(/\/+$/, '');
    const mockConfig = mockResponses[mockPath];
    
    if (mockConfig && mockConfig[config.method]) {
      // 标记为模拟请求
      config.mockResponse = true;
      config.mockHandler = mockConfig[config.method];
    }
    
    return config;
  },
  error => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  response => {
    // 添加调试信息
    console.debug(`API响应成功 [${response.config.method.toUpperCase()}] ${response.config.url}:`, response.data);
    return response;
  },
  error => {
    // 检查是否有模拟响应处理
    if (error.config && error.config.mockResponse) {
      console.log('使用模拟响应处理请求:', error.config.url);
      try {
        const mockData = error.config.mockHandler(error.config.data ? JSON.parse(error.config.data) : {});
        return Promise.resolve({
          data: mockData,
          status: 200,
          statusText: 'OK',
          headers: {},
          config: error.config
        });
      } catch (mockError) {
        console.error('模拟响应处理失败:', mockError);
      }
    }
    
    // 输出详细错误信息
    console.error(`API响应错误 [${error.config?.method?.toUpperCase() || 'UNKNOWN'}] ${error.config?.url || 'UNKNOWN_URL'}:`, error);
    console.error('详细错误信息:', {
      message: error.message,
      status: error.response?.status,
      statusText: error.response?.statusText,
      data: error.response?.data
    });
    
    // 处理401错误（未授权）
    if (error.response && error.response.status === 401) {
      ElMessage.error(error.response.data?.message || '登录已过期，请重新登录');
      localStorage.removeItem('token');
      localStorage.removeItem('user');
      router.push('/login');
    } else if (error.response && error.response.status === 403) {
      // 处理403错误（权限不足）
      ElMessage.error(error.response.data?.message || '没有权限执行此操作');
      router.push('/');
    } else if (error.response) {
      // 其他HTTP错误
      ElMessage.error(error.response.data?.message || '请求失败');
    } else if (error.request) {
      // 请求发出但没有收到响应
      ElMessage.error('服务器无响应，请检查网络连接');
    } else {
      // 请求配置错误
      ElMessage.error('请求配置错误');
    }
    
    return Promise.reject(error);
  }
);

export default api; 